package com.ftg.learn.chapter17.expand;


//这周最坏的情况  凡人篇-java最后一周
//最好的情况就是周三 数据库  mysql(数据结构  - 集合底层  进行部分复习)

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.function.Consumer;

/**
 * Question1: 现有十个学生的个人信息（姓名：性别：年龄）
 *   1： 求年龄大于 20的所有同学
 *   2： 求性别为男的所有同学
 *   3： 求姓张的所有同学
 * :面向对象 ： 多态来处理
 * consumer
 * Supplier
 * Predicate
 * function
 *  ->
 * @author KangJx
 * @date 2021/8/14
 */
public class Learnlambda {

    int a = 9;


    /**
     * 二个学生信息
     * @return
     */
    public List<Student> initTenStu(){
        return Arrays.asList(
          new Student("李二狗","男",34),
          new Student("李三猫","男",15),
          new Student("赵小狗","男",26),
          new Student("张大狗","男",15),
          new Student("李小狗","男",88),
          new Student("王二妮","女",9)
        );
    }

    /**
     * 这个方法也就是说你给我一个age 我要根据ifrule里面的规则 方法完成相应的处理
     * @param age
     * @param ifr
     */
    public void ageGen20(int age,IfRule<Student> ifr){
        List<Student> stus = this.initTenStu();

        for (Student s : stus){
            //求年龄大于 20的所有同学
            if(ifr.test(s)){
                System.out.println(s);
            }
        }
    }

    public void ageGenForLamdba(IfRule<Student> ifr){
        List<Student> stus = this.initTenStu();

        for (Student s : stus){
            //求年龄大于 20的所有同学
            if(ifr.test(s)){
                System.out.println(s);
            }
        }
    }

    public void sexMan(IfRule<Student> ifr){
        List<Student> stus = this.initTenStu();

        for (Student s : stus){
            //求年龄大于 20的所有同学
            if(ifr.test(s)){
                System.out.println(s);
            }
        }
    }


    public void nameStudent(IfRule<Student> ifr){
        List<Student> stus = this.initTenStu();

        for (Student s : stus){
            //求年龄大于 20的所有同学
            if(ifr.test(s)){
                System.out.println(s);
            }
        }
    }
    //这个列子我保留一下，一会重写完以后再讲这个
//    public List<Student> orderStudent(OrderStudentAge<Student> stu){
//        List<Student> stus = this.initTenStu();
//        List<Student> orderList = new ArrayList<>(stus.size());
//
//        for(Student s : stus){
//            if(stu.compare(stu,s)){
//                orderList.add(s);
//            }
//        }
//
//        return orderList;
//    }

    //按照面向对象的方式来完成  多态方式 来完成

    /**
     * 我们再在有一个处理这个运算
     *  业务上进行加法
     * @param x  加数1
     * @param y  加数2
     * @param mydeep  x与y运算规则 mydeep你现在知道吗？
     * @return
     */
    public int myDeel(int x,int y ,Deep<Integer> mydeep){
        return mydeep.deel(x,y);
    }

    public int myDeel(int x,Deep2<Integer> deep2){
        return deep2.add(x);
    }

    /**
     * 消费者  只花钱不挣钱
     * @param x
     * @param c
     */
    public void myDeel3(int x, Consumer<Integer> c){
        c.accept(x);

    }
}
